<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>bind的使用</title>
</head>
<body>
    
</body>
<script>
    /*
        bind的使用 
            -- 前面我们已经学习了 call() apply() 他们的共同点就是都是用来修改函数的this指向的  并且他们是立即执行的
                不同点在于call 和 apply() 传参的方式不同 他们呢第一个参数都是要修改this的指向为位置  call之后的参数是以逗号隔开  apply()传参方式是使用数组[] 参数以数组成员的形式传入
            
            bind -- 也是用来修改函数的this指向  但是它不是立即执行的  并且它由二次传参的机会  
    */

    function user(name){
        this.name = name
        console.log(this)
    }
    let res = user.bind({name:'jimmy',age:'22'},'xuexue')
    res()  //{name: "xuexue", age: "22"}  可见 使用bind确实是修改了this的指向  但是我们要再调用一个bind函数才会执行

    function math(a,b){
        return this.x + a + b
    }
    let res1 = math.bind({x:10,y:6},5,6,7)
    console.log(res1(5,5))  // 21  只会接收在bind的使用就传递的参数
    let res2 = math.bind({x:10,y:6},5)
    console.log(res2(5,7))   // 20 接收5和后面调用时的第一个参数

    /*
        总结 在使用bind的时候  bind是不会立即调用函数的  需要我们手动的再次调用一下
            当传递参数的时候  默认会使用bind绑定时的参数  当绑定时没有传参的时候  才会去考虑使用调用时的参数
    */
</script>
</html>